const Router = require("@koa/router");
const router = new Router();
const jwt = require("jsonwebtoken");
const {Sequelize, DataTypes, where} = require("sequelize");
// 验证用户身份的中间件
const authenticateUser = async (ctx, next) => {
  const token = ctx.headers.authorization;

  if (!token) {
    ctx.status = 401;
    ctx.body = {error: "未提供身份验证令牌。"};
    return;
  }

  // 解码 base64 编码的 token
  const decodedToken = Buffer.from(token, "base64").toString("utf-8");

  jwt.verify(decodedToken, "token", (err, decoded) => {
    if (err) {
      ctx.status = 401;
      ctx.body = {error: "无效的身份验证令牌。"};
      return;
    }

    ctx.state.userId = decoded.userId;
  });

  await next();
};

// 获取菜品单位列表
router.post("/getounce", authenticateUser, async (ctx) => {
  try {
    // 从请求体中获取条件查询参数
    const {Unitname} = ctx.request.body;

    // 构建查询条件对象
    const whereClause = {};

    // 添加每个条件的 LIKE 查询
    if (Unitname) {
      whereClause.Unitname = {[Sequelize.Op.like]: `%${Unitname}%`}; //菜品单位
    }
    // 查询符合条件的菜单列表
    const ounceList = await ctx.state.Ounce.findAll({
      where: whereClause,
    });

    // 查询数据总数
    const total = await ctx.state.Ounce.count({
      where: whereClause,
    });

    ctx.status = 200;
    ctx.body = {ounceList, total};
  } catch (error) {
    console.error("Error fetching ounce:", error);
    ctx.status = 500;
    ctx.body = {error: "获取菜品单位时发生错误。"};
  }
});

// 添加菜单项
router.post("/add", authenticateUser, async (ctx) => {
  try {
    // 获取请求体中的菜单信息
    const {Unitname} =
      ctx.request.body;

    // 检查是否存在同名单位
    const existingMenu = await ctx.state.Ounce.findOne({
      where: {Unitname},
    });

    // 如果存在同名单位，则提示不能添加
    if (existingMenu) {
      ctx.status = 400;
      ctx.body = {error: "单位已存在，不能重复添加。"};
      return;
    }

    // 创建菜单项
    const newounce = await ctx.state.Ounce.create({
      Unitname,
    });

    ctx.status = 201;
    ctx.body = {message: "菜品单位项添加成功。", data: newounce};
  } catch (error) {
    console.error("Error adding menu item:", error);
    ctx.status = 500;
    ctx.body = {error: "添加菜品单位项时发生错误。"};
  }
});

// 修改菜单项
router.post("/update", authenticateUser, async (ctx) => {
  try {
    // 获取请求体中的菜单信息
    const {Unitname} =
      ctx.request.body;
    const unId = ctx.request.body.id;

    // 查找要修改的菜单单位项
    const UnitToUpdate = await ctx.state.Ounce.findOne({
      where: {
        id: unId, // 排除当前菜单单位项的ID
      },
    });

    if (!menuToUpdate) {
      ctx.status = 404;
      ctx.body = {error: "未找到要修改的菜单项。"};
      return;
    }

    // 检查是否存在其他具有相同菜名的菜单项
    const existingUnit = await ctx.state.Ounce.findOne({
      where: {
        Unitname,
        id: {[Sequelize.Op.not]: unId}, // 排除当前菜单项的ID
      },
    });

    if (existingUnit) {
      ctx.status = 400;
      ctx.body = {error: "已存在相同菜名的菜单项，请选择其他菜名。"};
      return;
    }

    // 修改菜单单位项
    await UnitToUpdate.update({
     
      Unitname
    });

    ctx.status = 200;
    ctx.body = {message: "菜品单位项修改成功。", data: UnitToUpdate};
  } catch (error) {
    console.error("Error editing menu item:", error);
    ctx.status = 500;
    ctx.body = {error: "修改菜品单位项时发生错误。"};
  }
});

// 删除菜单项
router.post("/delete/:id", authenticateUser, async (ctx) => {
  try {
    const unId = ctx.params.id;

    // 查找要删除的项
    const UnitToDelete = await ctx.state.Ounce.findByPk(unId);

    // 删除项
    await UnitToDelete.destroy();

    ctx.status = 200;
    ctx.body = {message: "菜单项删除成功。"};
  } catch (error) {
    console.error("Error deleting menu item:", error);
    ctx.status = 500;
    ctx.body = {error: "删除菜单项时发生错误。"};
  }
});

module.exports = router;
